# Load the dataset
import pandas as pd
import plotly.graph_objs as go
import plotly.express as px
import plotly.io as pio
pio.templates.default = "plotly_white"
data = pd.read_csv("E:\\Portfolio_projects\\Python\\UK_monthly_gdp.csv")
data.head()
| Time Period | GDP Growth | |
|---|---|---|
| 0 | /01/2020 | 0.3 |
| 1 | /02/2020 | -0.5 |
| 2 | /03/2020 | -7.0 |
| 3 | /04/2020 | -20.9 |
| 4 | /05/2020 | 3.2 |
fig = px.imshow(data['GDP Growth'].to_frame().T,
x=data.index,
y=['GDP Growth'],
color_continuous_scale='Viridis',
labels={'x': 'Time Period'},
title='GDP Growth over Time')
fig.update_xaxes(type='category')
fig.show()
# Convert monthly data to quarterly data
data['Time Period'] = pd.to_datetime(data['Time Period'], format='/%m/%Y')
data.set_index('Time Period', inplace=True)
# Resample and take the mean for quarterly data
quarterly_data = data.resample('Q').mean()
print(quarterly_data.head())
GDP Growth Time Period 2020-03-31 -2.400000 2020-06-30 -2.900000 2020-09-30 3.500000 2020-12-31 0.200000 2021-03-31 0.033333
# Calculate recession based on quarterly GDP growth
quarterly_data['Recession'] = ((quarterly_data['GDP Growth'] < 0) & (quarterly_data['GDP Growth'].shift(1) < 0))
# Fill missing values with False (since the first quarter cannot be in a recession)
quarterly_data['Recession'].fillna(False, inplace=True)
# Plot the GDP growth and recession data
fig = go.Figure()
fig.add_trace(go.Scatter(x=quarterly_data.index,
y=quarterly_data['GDP Growth'],
name='GDP Growth',
line=dict(color='green', width=2)))
fig.add_trace(go.Scatter(x=quarterly_data[quarterly_data['Recession']].index,
y=quarterly_data[quarterly_data['Recession']]['GDP Growth'],
name='Recession', line=dict(color='red', width=2)))
fig.update_layout(title='GDP Growth and Recession over Time (Quarterly Data)',
xaxis_title='Time Period',
yaxis_title='GDP Growth')
fig.show()
# Create a boolean mask for recession periods
quarterly_data['Recession Start'] = quarterly_data['Recession'].ne(quarterly_data['Recession'].shift()).cumsum()
# Calculate recession duration and severity
recession_data = quarterly_data.groupby('Recession Start').agg({
'Recession': 'first',
'GDP Growth': ['size', 'sum']
}).reset_index()
recession_data.columns = ['Recession Start', 'Recession', 'Duration', 'Severity']
# Plot Duration and Severity of Recession
fig = px.bar(recession_data, x='Recession Start', y=['Duration', 'Severity'],
title='Duration and Severity of Recession',
labels={'value': 'Duration/Severity', 'variable': 'Metric'},
color='Recession', color_discrete_map={False: 'green', True: 'red'})
# Update the layout
fig.update_layout(xaxis_title='Recession Periods', yaxis_title='Duration/Severity')
fig.show()